﻿using System;
using System.Collections.Generic;
using System.Linq;
using Onshi.POS.Articulos.Vistas;
using Onshi.POS.Modelo.Entidades;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Repositorios;

namespace Onshi.POS.Articulos
{
    public class PromocionesAltaBajaModificacionPresentador
    {
        #region Constructor
        public PromocionesAltaBajaModificacionPresentador(IPromocionesAltaBajaModificacion vista)
        {
            this.vista = vista;
        }
        #endregion

        #region Atributos
        private IPromocionesAltaBajaModificacion vista = null;
        private List<Promocion> lista;
        #endregion

        #region Propiedades
        private RepositorioPromocion RepositorioPromocion
        {
            get { return new RepositorioPromocion(); }
        }
        #endregion

        #region Metodos

        private void ActualizarLista()
        {
            lista = RepositorioPromocion.DevolverTodos();
            vista.Lista = lista;
        }

        private void Guardar()
        {
            var promocion = new Promocion();
            promocion.Id = vista.IdPromocion;
            promocion.Nombre = vista.Nombre;
            promocion.TipoFormaPago.Id = vista.IdTipoFormaPago;
            promocion.Lunes = vista.Lunes;
            promocion.Martes = vista.Martes;
            promocion.Miercoles = vista.Miercoles;
            promocion.Jueves= vista.Jueves;
            promocion.Viernes = vista.Viernes;
            promocion.Sabado = vista.Sabado;
            promocion.Domingo = vista.Domingo;
            promocion.FechaDesde = vista.FechaDesde;
            promocion.FechaHasta = vista.FechaHasta;
            promocion.HoraDesde = vista.HoraDesde;
            promocion.HoraHasta = vista.HoraHasta;
            promocion.Cantidad = vista.Cantidad;
            promocion.Observacion = vista.Observacion;
            promocion.Descuento = vista.Descuento;

            switch (vista.EstadoAbm)
            {
                case EnumEstadoAltaBajaModificacionHabilitacion.ALTA:
                    RepositorioPromocion.Insertar(promocion);
                    break;
                case EnumEstadoAltaBajaModificacionHabilitacion.MODIFICACION:
                    RepositorioPromocion.Modificar(promocion);
                    break;
                case EnumEstadoAltaBajaModificacionHabilitacion.BAJA:
                    RepositorioPromocion.Eliminar(promocion);
                    break;
            }
            ActualizarGrilla();
        }

        public void Aceptar()
        {
            Guardar();
        }

        public void Eliminar()
        {
            Guardar();
        }

        public void ActualizarGrilla()
        {
            ActualizarLista();
            Filtrar();
        }

        public void Filtrar()
        {
            if (lista != null && vista.NombreBusqueda != String.Empty)
            {
                var consulta = from Promocion item in lista  where item.Nombre.ToLower().Contains(vista.NombreBusqueda) & 
                               item.FechaDesde.Equals(vista.FechaDesdeBusqueda) & 
                               item.FechaHasta.Equals(vista.FechaHasta) & 
                               item.Cantidad.Equals(vista.Cantidad) & 
                               item.Descuento.Equals(vista.Descuento) & 
                               item.Observacion.Contains(vista.Observacion) & 
                               item.Lunes.Equals(vista.Lunes) &
                               item.Martes.Equals(vista.Martes)  &
                               item.Miercoles.Equals(vista.Miercoles) &
                               item.Jueves.Equals(vista.Jueves) &
                               item.Viernes.Equals(vista.Viernes) &
                               item.Sabado.Equals(vista.Sabado) &
                               item.Domingo.Equals(vista.Domingo)
                               select item;
                vista.Lista = consulta.ToList();
            }
            else
            {
                vista.Lista = lista;
            }
        }

        #endregion

    }
}
